#!/bin/bash

# 财务管理系统停止脚本
# 配合优化版start.sh使用

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 日志函数
log_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

log_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

log_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 获取脚本所在目录
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

log_info "正在停止财务管理系统..."

# 停止后端服务
stop_backend() {
    if [ -f "$SCRIPT_DIR/.backend.pid" ]; then
        BACKEND_PID=$(cat "$SCRIPT_DIR/.backend.pid")
        if ps -p $BACKEND_PID > /dev/null 2>&1; then
            log_info "停止后端服务 (PID: $BACKEND_PID)..."
            kill -TERM $BACKEND_PID 2>/dev/null || kill -9 $BACKEND_PID 2>/dev/null
            sleep 2
            
            # 确认进程已停止
            if ps -p $BACKEND_PID > /dev/null 2>&1; then
                log_warning "强制停止后端服务..."
                kill -9 $BACKEND_PID 2>/dev/null || true
            fi
            
            log_success "后端服务已停止"
        else
            log_warning "后端服务进程不存在 (PID: $BACKEND_PID)"
        fi
        rm -f "$SCRIPT_DIR/.backend.pid"
    else
        log_warning "未找到后端服务PID文件"
    fi
}

# 停止前端服务
stop_frontend() {
    if [ -f "$SCRIPT_DIR/.frontend.pid" ]; then
        FRONTEND_PID=$(cat "$SCRIPT_DIR/.frontend.pid")
        if ps -p $FRONTEND_PID > /dev/null 2>&1; then
            log_info "停止前端服务 (PID: $FRONTEND_PID)..."
            kill -TERM $FRONTEND_PID 2>/dev/null || kill -9 $FRONTEND_PID 2>/dev/null
            sleep 2
            
            # 确认进程已停止
            if ps -p $FRONTEND_PID > /dev/null 2>&1; then
                log_warning "强制停止前端服务..."
                kill -9 $FRONTEND_PID 2>/dev/null || true
            fi
            
            log_success "前端服务已停止"
        else
            log_warning "前端服务进程不存在 (PID: $FRONTEND_PID)"
        fi
        rm -f "$SCRIPT_DIR/.frontend.pid"
    else
        log_warning "未找到前端服务PID文件"
    fi
}

# 清理端口占用（备用方案）
cleanup_ports() {
    log_info "清理端口占用..."
    
    # 清理8000端口
    BACKEND_PIDS=$(lsof -ti :8000 2>/dev/null || true)
    if [ ! -z "$BACKEND_PIDS" ]; then
        log_warning "发现端口8000仍被占用，正在清理..."
        echo $BACKEND_PIDS | xargs kill -9 2>/dev/null || true
    fi
    
    # 清理3000端口
    FRONTEND_PIDS=$(lsof -ti :3000 2>/dev/null || true)
    if [ ! -z "$FRONTEND_PIDS" ]; then
        log_warning "发现端口3000仍被占用，正在清理..."
        echo $FRONTEND_PIDS | xargs kill -9 2>/dev/null || true
    fi
    
    log_success "端口清理完成"
}

# 清理日志文件（可选）
cleanup_logs() {
    if [ "$1" = "--clean-logs" ]; then
        log_info "清理日志文件..."
        rm -f "$SCRIPT_DIR/backend.log"
        rm -f "$SCRIPT_DIR/frontend.log"
        log_success "日志文件已清理"
    fi
}

# 主执行流程
main() {
    stop_backend
    stop_frontend
    cleanup_ports
    cleanup_logs $1
    
    echo
    echo "======================================"
    log_success "财务管理系统已完全停止！"
    echo "======================================"
    
    if [ "$1" != "--clean-logs" ]; then
        echo "提示: 使用 './stop.sh --clean-logs' 可同时清理日志文件"
    fi
}

# 执行主函数
main $1